package cn.iocoder.yudao.module.system.service.iam.enums;


/**
 * CodeMsg 用于保存 异常码和异常信息，由于失败没有数据返回
 */
public class CodeMsg<T> {
    private int code;
    private String msg;
    private T data;

    /**
     * 服务端异常 5008xx
     */
    public static CodeMsg SUCCESS = new CodeMsg(200, "成功");
    public static CodeMsg SERVER_ERROR = new CodeMsg(100, "系统异常");
    public static CodeMsg BIND_ERROR = new CodeMsg(500800, "(绑定异常)参数校验异常：%s"); /*用占位符 传入一个参数*/
    /**
     * 没有SESSION 5001xx
     */
    public static CodeMsg SESSION_ERROR = new CodeMsg(500111, "登录过期，请重新登陆！");
    public static CodeMsg REQUEST_ERROR = new CodeMsg(500789, "非法请求！"); /*用占位符 传入一个参数*/
    public static CodeMsg REQUEST_OVER_LIMIT = new CodeMsg(500999, "请求次数过多！"); /*用占位符 传入一个参数*/

    /**
     * 登陆异常 5002xx
     */
    public static CodeMsg LOGIN_SUCCESS = new CodeMsg(200, "登录成功", true);
    public static CodeMsg LOGIN_FAIL = new CodeMsg(-6, "登录鉴权失败", false);
    public static CodeMsg LOGIN_ERROR_PASSWORD_EMPTY = new CodeMsg(-4, "密码不能为空");
    public static CodeMsg LOGIN_ERROR_MOBILE_EMPTY = new CodeMsg(-3, "帐号不能为空");
    public static CodeMsg LOGIN_ERROR_MOBILE_ERROR = new CodeMsg(-5, "帐号格式错误");
    public static CodeMsg LOGIN_ERROR_USER_NOT_ERROR = new CodeMsg(-1, "帐号不存在");
    public static CodeMsg LOGIN_ERROR_PASS_ERROR = new CodeMsg(-2, "密码错误");

    /**
     * 收藏
     * */
    public static CodeMsg ADD_COLLECT_FAIL = new CodeMsg(500, "添加收藏失败");

    /**
     * 访问异常 5005xx
     */
    public static CodeMsg ACCESS_LIMIT = new CodeMsg(500583, "一定时间内只允许访问有限的次数（5次）！");


    /**
     * 异常构造函数
     */
    public CodeMsg(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }


    public CodeMsg(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public int getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    /**
     * 该方法用于返回一个CodeMsg对象 便于 全局异常处理的调用
     * 全局异常处理传入 objects 参数，并返回一个CodeMsg 对象
     * 该方法根据入参 显示 对应的异常code , 以及加入 异常信息的msg显示
     */
    /*利用可变长参数定义 ：适用于 参数类型可知，但是个数未知的情况 */
    public CodeMsg fillArgs(Object... objects) {
        int code = this.code; /* */
        String message = String.format(this.msg, objects);
        return new CodeMsg(code, message);
    }


}
